package com.xb.loan.fund.dao;

import com.xb.loan.fund.dao.bean.CashCharge;
import com.xb.loan.fund.dao.bean.CashChargeRec;
import com.xb.loan.fund.dao.bean.StatUserCharge;
import com.xb.loan.util.mybatis.MyBatisRepository;

import java.util.List;
import java.util.Map;

@MyBatisRepository
public interface CashChargeDao {
	/**
	 * 插入充值临时表
	 * @param cashCharge
	 * @return
	 */
	int insertCashChargeTmp(CashCharge cashCharge);
	
	/**
	 * 从充值临时表中删除一条数据
	 * @param chargeId
	 * @return
	 * 2015年11月18日 by wenju.song
	 */
	int deleteCashChargeTmpById(String chargeId);
	
	/**
	 * 更新充值临时表中的一条数据
	 * @param params
	 * @return
	 */
	int updateCashChargeTmpById(Map<String, Object> params);
	
	/**
	 * 根据chargeId联合查询出一条记录
	 * @param chargeId
	 * @return
	 */
	CashCharge queryCashChargeById(String chargeId);
	
	/**
	 * 向充值正式表中插入一条数据
	 * @param cashCharge
	 * @return
	 */
	int insertCashCharge(CashCharge cashCharge);

	/**
	 * 更新CashCharge记录
	 * @param params 只能更新AccountStatus、informPurchase字段
	 * @return
	 */
	int updateCashChargeById(Map<String, Object> params);

	/**
	 * 清除指定账期的对账状态
	 * @param accountPeriod  账期
	 */
	int clearAccountStatus(String accountPeriod);
	
	/**
	 * 查询用户充值信息列表（只查询正式表）
	 * @param map 目前只包含accountPeriod、accountStatus参数
	 * @return
	 */
	public List<CashCharge> queryAllCashCharge(Map<String, Object> map);
	
	/**
	 * 查询用户充值信息列表（包含临时表和正式表）
	 * @param map 目前只包含orderId、status参数
	 * @return
	 */
	public List<CashCharge> queryAllCashChargeUnion(Map<String, Object> map);
	
	/**
	 * 查询用户充值信息列表（Union充值临时表与充值正式表）
	 * @param map 
	 *                platId 平台ID userId 用户ID payChannelType 支付渠道类型 status
	 *                支付状态  startDate 充值开始时间 endDate 充值结束时间
	 *                pageNum 页数 numPerPage 每页的行数
	 */
	public List<CashCharge> queryCashChargeUnion(Map<String, Object> map);

	/**
	 * 查询用户充值信息数量（Union充值临时表与充值正式表）
	 * @param map
	 *                platId 平台ID userId 用户ID payChannelType 支付渠道类型 status
	 *                支付状态  startDate 充值开始时间 endDate 充值结束时间
	 */
	public int queryCashChargeUnionCount(Map<String, Object> map);

	/**
	 * 根据渠道订单ID查询充值订单
	 * @param params
	 * @return
	 */
	CashCharge queryCashChargeByPid(Map<String, Object> params);

	/**
	 * 查询当天充值总次数
	 * @param userId
	 */
	int querySumOptNumToday(String userId);

	/**
	 * 查询当天充值总金额
	 * @param userId
	 */
	Double querySumMoneyToday(String userId);

	/**
	 * 按天，分渠道统计充值信息
	 * @return
	 */
	List<Map<String,Object>> statChargeDay(Map<String, Object> params);
	
	/**
	 * 查询用户是否有未完成的充值订单
	 * @param accountId
	 * @return
	 */
	int queryCashChargeTmpByAccountId(String accountId);
	
	/**
	 * 查询各个渠道下某段时间的用户充值额
	 * @param map
	 * @return
	 */
	List<StatUserCharge> queryStatUserCharge(Map<String, Object> map);


	public List<CashChargeRec> queryCashChargeRec(Map<String, Object> map);

	public int queryCashChargeRecCount(Map<String, Object> map);
	
}